package com.x.erp.rpc;

import com.x.erp.model.*;
import com.x.framework.rpc.BaseRpcService;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author toughPear
 *车辆信息
 */
public interface CarRpcService extends BaseRpcService {
	/**
	 * 保存车辆信息
	 * @param car 封装的需要添加 的车辆信息
	 * @return 包含carId的Car对象
	 */
	public Car insertCar(Car car);
	/**
	 * @param car 封装的需要修改的车辆信息
	 * @return 修改的车辆信息数量
	 */
	public int updateCarInfo(Car car);

	/**
	 * @param car 封装的需要修改的车辆信息
	 * @return 修改的车辆信息数量
	 */
	public int updateCarState(Car car);

	/**
	 * 修改车辆信息
	 * @param car
	 */
	public int updateCar(Car car);

	/**
	 * 修改车辆信息
	 * @param car
	 * @param carWhere
	 */
	public int updateCar(Car car, Car carWhere);

	/**
	 * @param car 需要删除的车辆的检索条件
	 */
	public int deleteCar(Car car);

	/**
	 * 查询车辆信息
	 * @param car 封装的车辆信息检索条件
	 * @return
	 */
	public Car selectCar(Car car);

	/**
	 * 查询车辆总数
	 * @param car
	 * @return
	 */
	public int selectCarNum(Car car);

	/**查询车辆信息列表
	 * @param car 封装的车辆信息检索条件
	 * @return
	 */
	public List<Car> selectCarList(Car car);

	/**
	 * 查询车辆配置
	 * @param carConfInfo
	 * @return
	 */
	public List<Map<String, Object>> selectCarConfInfo(CarConfInfo carConfInfo);

	/**
	 * 查询车辆配置
	 * @param carConf
	 * @return
	 */
	public List<Map<String, Object>> selectCarConf(CarConf carConf);

	/**
	 * 根据车辆ID查询图片信息
	 * @param carImage
	 * @return
	 */
	public List<CarImage> selectCarImageByCarId(CarImage carImage);

	/**
	 * 查询入库信息
	 * @param car
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public Map<String, Object> selectCarStorageInfo(Car car, Date startDate, Date endDate);

	/**
	 * 市场入库信息
	 * @param car
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public List<Map<String, Object>> selectMarketCarStorageInfo(Car car, Date startDate, Date endDate);

	/**
	 * 查询车辆出库信息
	 * @param car
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public Map<String, Object> selectCarOutStockInfo(Car car, Date startDate, Date endDate);

	/**
	 * 查询车辆预订信息
	 * @param car
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public Map<String, Object> selectCarOrderInfo(Car car, Date startDate, Date endDate);

	/**
	 * 查询库存品牌排行
	 * @param car
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public List<Map<String, Object>> selectStorageBrandRank(Car car, Date startDate, Date endDate, List<Car> cars);

	/**
	 * 查询出库品牌排行
	 * @param car
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public List<Map<String, Object>>  selectCarOutStockBrandRank(Car car, Date startDate, Date endDate);

	/**
	 * 查询预订品牌排行
	 * @param car
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public List<Map<String, Object>>  selectCarOrderBrandRank(Car car, Date startDate, Date endDate);

	/**
	 * 查询库存车系排行
	 * @param car
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public List<Map<String, Object>> selectStorageSeriesRank(Car car, Date startDate, Date endDate, List<Car> cars);

	/**
	 * 查询出库车系排行
	 * @param car
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public List<Map<String, Object>>  selectCarOutStockSeriesRank(Car car, Date startDate, Date endDate);

	/**
	 * 查询预订车系排行
	 * @param car
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public List<Map<String, Object>>  selectCarOrderSeriesRank(Car car, Date startDate, Date endDate);

	/**
	 * 查询库存车龄排行
	 * @param car
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public List<Map<String, Object>> selectStorageCarAgeRank(Car car, Date startDate, Date endDate, List<Car> cars);

	/**
	 * 查询库存价格排行
	 * @return
	 */
	public List<Map<String, Object>> selectStoragePriceRank(Car car, Date startDate, Date endDate, List<Car> cars);

	/**
	 * 查询车辆雷达图信息
	 * @return
	 */
	public Map<String, Object> selectCarRadarInfo(Car car, Date startDate, Date endDate, List<Car> cars);

	/**
	 * 查询出库车龄排行
	 * @param car
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public List<Map<String, Object>>  selectCarOutStockCarAgeRank(Car car, Date startDate, Date endDate);

	/**
	 * 查询预订车龄排行
	 * @param car
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public List<Map<String, Object>>  selectCarOrderCarAgeRank(Car car, Date startDate, Date endDate);

	/**
	 * 查询库存库龄排行
	 * @param car
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public List<Map<String, Object>> selectStorageStockAgeRank(Car car, Date startDate, Date endDate);

	/**
	 * 查询出库库龄排行
	 * @param car
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public List<Map<String, Object>>  selectCarOutStockStockAgeRank(Car car, Date startDate, Date endDate);

	/**
	 * 查询预订库龄排行
	 * @param car
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public List<Map<String, Object>> selectCarOrderStockAgeRank(Car car, Date startDate, Date endDate);

	/**
	 * 查询车辆库存列表
	 * @param car
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public List<Car> selectCarStorageList(Car car, Date startDate, Date endDate);

	/**
	 * 查询车辆库存数量
	 * @param car
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public int selectCarStorageNum(Car car, Date startDate, Date endDate);

	/**
	 * 查询车辆出库列表
	 * @param car
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public List<Car> selectCarOutStockList(Car car, Date startDate, Date endDate);

	/**
	 * 查询车辆出库列表
	 * @param car
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public int selectCarOutStockNum(Car car, Date startDate, Date endDate);

	/**
	 * 查询车辆预订列表
	 * @param car
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public List<Car> selectCarOrderList(Car car, Date startDate, Date endDate);

	/**
	 * 查询车辆预订列表
	 * @param car
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public int selectCarOrderNum(Car car, Date startDate, Date endDate);

	/**
	 * 查询相似价格车辆
	 * @param car 车辆信息
	 * @return
	 */
	public List<Car> selectSimilarPriceCar(Car car);

	/**
	 * 绑定RFID
	 * @param car
	 * @param carCard
	 * @return
	 */
	int updateCarBindRfid(Car car, String carCard);

	/**
	 * 修改车辆图片
	 * @param image
	 * @return
	 */
	int updateCarImage(CarImage image);

	/**
	 * 查询验证车架号
	 * @param car
	 * @return
	 */
	List<Car> selectValiCarVin(Car car);

	/**
	 * 通过车辆订阅列表查询对应的车辆信息列表
	 *
	 * @param carSelectTmpList
	 * 多条车辆订阅信息，values封装查询条件
	 * @return
	 */
	public List<Car> selectCarListByCarSelectTemplateList(Car car, List<CarSelectTemplate> carSelectTmpList);

	/**
	 * 修改车辆抵押状态
	 * @param car
	 */
	public int updateCarOfPledge(Car car);

	/**
	 * 查询所有车辆信息，用于导入索引库
	 * @param car
	 */
	public List<ESCar> selectAllCar(Car car);
}
